package semaforo;

/**
 * Esta clase permite la exclusion mutua entre varios hilos que compiten por los
 * mismos recursos. Aclaracion de implementacion: Si bien Java proporciona dos
 * formas de sincronizacion, optamos por la sincronizacion a nivel metodo que
 * permite un codigo mas legible.
 * 
 * @author ger
 * 
 */
public interface Semaforo {

	/**
	 * El metodo consumir() permite que un thread se ejecute siempre y cuando
	 * haya recursos disponibles. En caso de que no haya, el thread se dormira
	 * hasta que la cantDisponible sea mayor a cero. En este caso, consumira un
	 * recurso y llamar'a a los otros hilos para que consuman.
	 * 
	 */
	public void consumir();
	
	/**
	 * El metodo liberar() permite que un thread se ejecute siempre y cuando la
	 * cantidad de recursos disponibles sea menor a los totales. En caso de que
	 * no haya, el thread se dormira hasta que la cantDisponible sea menor o igual a
	 * cero. En este caso, liberar'a un recurso y llamar'a a los otros hilos
	 * para que consuman.
	 */
	public void liberar();
	
}
